<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>


    <script>

        // 作用域：
        //    全局作用域和局部作用域

        //    全局变量：在函数外面声明的变量   -- 在所有的地方都可以使用
        //    局部变量：在函数里面声明的变量   -- 只能在函数里面使用


        // 作用域链
            // 函数自己如果声明了这个变量,就使用自己的 
            // 函数自己没有这个变量就去查找上一层函数的变量
            // 上一层也没有,就继续向上找,一直找到全局变量
            // 如果都没有,就报错

 

        // 生命周期




        // function rand(min , max) {
        //     n是在函数里面声明的变量，在函数外面不能访问
        //     var n = parseInt(Math.random() * (max - min) + min) ;
            
        // }


        // rand(20,50);
        // console.log(n);   // 报错   n is not defined


        // var a = 3 ;

        // function fn() {
        //     console.log(a) ;
        //     // 变量b在函数调用时创建，函数执行结束之后，这个变量会被销毁，因此在函数外面无法访问这个变量
        //     var b = 5 ;
        // }

        // fn() ;
        // console.log(a) ;
        // console.log(b) ;   // 报错



        // function ff() {
        //     // 没有var的变量会自动提升为全局变量
        //     b = 5 ;
        // }

        // ff() ;

        // console.log(b);   // 5


        //  将来的语法规范    
        // var a = 3 ;
        // var a = 5 ; // es6中报错   变量名不能重复




        // function f1 () {
        //     var c = 3 ;

        //     function f2() {
        //         console.log(c) ;   // 3
        //         var d = 4 ;
        //     }
        //     f2() ;
        //     console.log(d);   // 报错
        // }

        // f1() ;


        // 作用域链
            // 函数自己如果声明了这个变量,就使用自己的 
            // 函数自己没有这个变量就去查找上一层函数的变量
            // 上一层也没有,就继续向上找,一直找到全局变量
            // 如果都没有,就报错

        function f1 () {
            var c = 3 ;

            function f2() {
                var c = 6 ;
                console.log(c) ;   // 6
                var d = 4 ;
            }
            f2() ;
        }

        f1() ;


        




    </script>
    
</body>
</html>